home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / dev / src / wangisrc.lha / wangi / z / SM / SMPrefs / Window_S+W.PAS < prev    next >
Pascal/Delphi Source File  |  1995-07-11  |  14KB  |  482 lines

  1. Procedure SWWindow; 
  2.  
  3. CONST
  4.     NI         = 0; 
  5.     CC         = 1;
  6.     G_SCR      = 6;
  7.     G_DTS      = 2;
  8.     G_REQ      = 3;
  9.     G_IMMED    = 4;
  10.     G_REP      = 5;
  11.     G_DOWN     = 7;
  12.     G_ACROSS   = 8;
  13.     G_WAIT     = 9;
  14.     G_WIT      = 10;
  15.     G_OK       = 11; 
  16.     G_CAN      = 12;
  17.  
  18. VAR 
  19.     T            : Array[0..13] of tTagItem;
  20.     CmdFile, CmdDir, fpart, dpart, junkis: String;
  21.     GadFlags     : tNewGadget;
  22.     G            : Array[NI..G_CAN] of pGadget;
  23.     cr           : pFileRequester;
  24.     dummy        : LONG;
  25.     ExitFlag, OK : Boolean;
  26.     TheWin       : pWindow;
  27.     message      : pIntuiMessage;
  28.     MsgClass, MsgCode     : LongInt;
  29.     gadID        : LONG;
  30.     StrInfo      : pStringInfo;
  31.     l            : Pointer;
  32.     l2           : LONG;
  33.     ret, cont    : Boolean;
  34.     RK           : pRemember;
  35.     l3           : BPTR;
  36.     strp         : STRPTR;
  37.     Lab          : Array[0..4] of STRPTR;
  38.     tmpdown, tmpacross, tmpscrt : LONG;
  39.  
  40.    
  41.  
  42. Procedure CheckFile(f : STRPTR);
  43.  
  44. TYPE
  45.     ULONG = LongInt;
  46.     UBYTE = Byte;
  47.     
  48.     pFrameInfo = ^tFrameInfo;
  49.     tFrameInfo = Record
  50.         fri_PropertyFlags : ULONG;
  51.         fri_Resolution : Point;
  52.         fri_RedBits : UBYTE;
  53.         fri_GreenBits : UBYTE;
  54.         fri_BlueBits : UBYTE;
  55.         fri_Width : ULONG;
  56.         fri_Height : ULONG;
  57.         fri_Depth : ULONG;
  58.         fri_Screen : pScreen;
  59.         fri_ColorMap : pColorMap;
  60.         fri_Flags : ULONG;
  61.     End;
  62.     
  63.     pdtFrameBox = ^tdtFrameBox;
  64.     tdtFrameBox = Record
  65.         MethodID : ULONG;
  66.         dtf_GInfo : Pointer;
  67.         dtf_ContentsInfo : pFrameInfo;
  68.         dtf_FrameInfo : pFrameInfo;
  69.         dtf_SizeFrameInfo : ULONG;
  70.         dtf_FrameFlags : ULONG;
  71.     End;
  72.     
  73. VAR
  74.     obj    : Pointer;
  75.     modeid : LONG;
  76.     T      : Array[0..4] of LONG;
  77.     junk   : LONG;
  78.     dtf    : pdtFrameBox;
  79.     fri    : pFrameInfo;
  80.     
  81. CONST
  82.     PDTA_ModeID       = $800010C8;
  83.     DTM_FRAMEBOX = $601;
  84.     
  85. begin
  86.     If DataTypesBase <> NIL then begin
  87.         modeid := 0;
  88.         dtf := AllocVec(Sizeof(tdtFrameBox), MEMF_CLEAR);
  89.         if dtf <> NIL then begin
  90.             fri := AllocVec(sizeof(tFrameInfo), MEMF_CLEAR);
  91.             if fri <> NIL then begin
  92.                 obj := NewDTObjectA(f, NIL);
  93.                 if obj <> NIL then begin
  94.                     T[0] := PDTA_ModeID;
  95.                     T[1] := LONG(@modeid);
  96.                     T[2] := TAG_END;
  97.                     junk := GetDTAttrsA(obj, @T);
  98.             
  99.                     dtf^.MethodID := DTM_FRAMEBOX;
  100.                     dtf^.dtf_FrameInfo := fri;
  101.                     dtf^.dtf_ContentsInfo := fri;
  102.                     dtf^.dtf_SizeFrameInfo := sizeof(tFrameInfo);
  103.                     if DoDTMethodA(obj, NIL, NIL, pMsg(dtf)) <> NULL then begin
  104.                         
  105.                         If fri^.fri_Depth <> 0 then
  106.                             CD.cd_ScrDepth := fri^.fri_Depth;
  107.                         
  108.                         If ModeID <> 0 then begin
  109.                             If ModeID <> CD.cd_ModeId then
  110.                                 CD.cd_ModeId := ModeID;
  111.                         End;
  112.  
  113.                         if ((fri^.fri_PropertyFlags and DIPF_IS_HAM) <> 0) then begin
  114.                             CD.cd_ModeId := CD.cd_ModeId | HAM_KEY;
  115.                         End;
  116.                         
  117.                         if ((fri^.fri_PropertyFlags and DIPF_IS_EXTRAHALFBRITE) <> 0) then begin
  118.                             CD.cd_ModeId := CD.cd_ModeId | EXTRAHALFBRITE_KEY;
  119.                         End;
  120.                         
  121.                         If fri^.fri_Width <> 0 then
  122.                             CD.cd_ScrW := fri^.fri_Width;
  123.                             
  124.                         If fri^.fri_Height <> 0 then
  125.                             CD.cd_ScrH := fri^.fri_Height;
  126.                     End;
  127.                     DisposeDTObject(obj);
  128.                 End;
  129.                 FreeVec(fri);
  130.             End;
  131.             FreeVec(dtf);
  132.         end;
  133.     end;
  134. end;
  135.  
  136. { check new across and if valid calculate down }
  137. Procedure AcrossGadFunc;
  138.     
  139. Begin
  140.     tmpAcross := Strinfo^.Longint_;
  141.     if tmpAcross <= 0 then begin
  142.         tmpAcross := 1;
  143.         DisplayBeep(NIL);
  144.         T[0].ti_Tag  := GTIN_Number;
  145.         T[0].ti_Data := tmpacross;
  146.         T[1].ti_Tag  := TAG_DONE;
  147.         GT_SetGadgetAttrsA(g[G_ACROSS], TheWin, NIL, @T);
  148.     end;
  149. end;
  150.  
  151.  
  152. begin
  153.     tmpscrt := CD.cd_ScrT;
  154.     tmpAcross := CD.cd_Across;
  155.     cr := NIL;
  156.     ret := false;
  157.     RK := NIL;
  158.     G[NI] := NIL;
  159.     G[CC] := CreateContext(@g[NI]);
  160.     If G[CC] <> NIL Then begin
  161.     
  162.     T[0].ti_Tag  := GTIN_MaxChars;
  163.     T[0].ti_Data := 3;
  164.     T[1].ti_Tag  := GTIN_Number;
  165.     T[1].ti_Data := CD.cd_Across;
  166.     T[2].ti_Tag  := TAG_END;
  167.     With GadFlags Do Begin
  168.         ng_TextAttr   := @My_Font;
  169.         ng_Width      := Sizes[S_G2_W];
  170.         ng_LeftEdge   := ((Sizes[TxtWin_L] * 2) div 3)+4;
  171.         ng_TopEdge    := Sizes[TBS] + 4;
  172.         ng_Height     := Sizes[S_GAD_H];
  173.         ng_VisualInfo := vi;
  174.         ng_GadgetText := CStrConstPtrAR(@RK, 'Across');
  175.         ng_GadgetID   := G_ACROSS;
  176.         ng_Flags      := PLACETEXT_LEFT;
  177.     End;
  178.     G[G_ACROSS] := CreateGadgetA(INTEGER_KIND, G[CC], @GadFlags, @T);
  179.     
  180.     T[0].ti_Tag  := GTNM_Border;
  181.     T[0].ti_Data := True_;
  182.     T[1].ti_Tag  := GTNM_Number;
  183.     T[1].ti_Data := 337604; { magic number (NOT!) }
  184.     T[2].ti_Tag  := TAG_END;
  185.     With GadFlags Do Begin
  186.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  187.         ng_GadgetText := CStrConstPtrAR(@RK, 'Down');
  188.         ng_GadgetID   := G_DOWN;
  189.     End;
  190.     G[G_DOWN] := CreateGadgetA(NUMBER_KIND, G[G_ACROSS], @GadFlags, @T);
  191.     
  192.     T[0].ti_Tag  := GTIN_MaxChars;
  193.     T[0].ti_Data := 3;
  194.     T[1].ti_Tag  := GTIN_Number;
  195.     T[1].ti_Data := CD.cd_Wait;
  196.     T[2].ti_Tag  := TAG_END;
  197.     With GadFlags Do Begin
  198.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 1;
  199.         ng_GadgetText := CStrConstPtrAR(@RK, 'Wait (s)');;
  200.         ng_GadgetID   := G_WAIT;
  201.     End;
  202.     G[G_WAIT] := CreateGadgetA(INTEGER_KIND, G[G_DOWN], @GadFlags, @T);
  203.     
  204.     T[0].ti_Tag  := GTCB_Checked;
  205.     T[0].ti_Data := ord(CD.cd_Wit); 
  206.     T[1].ti_Tag  := $80080044;  { GTCB_Scaled }
  207.     T[1].ti_Data := True_;
  208.     T[2].ti_Tag  := TAG_DONE;
  209.     With GadFlags Do Begin
  210.         ng_Width      := Sizes[S_CM_W];
  211.         ng_TopEdge    := ng_TopEdge + ng_Height + 1;
  212.         ng_GadgetText := CStrConstPtrAR(@RK, 'Phrases');
  213.         ng_GadgetID   := G_WIT;
  214.     End;
  215.     G[G_WIT] := CreateGadgetA(CHECKBOX_KIND, G[G_WAIT], @GadFlags, @T);
  216.  
  217.     Lab[0] := CStrConstPtrAR(@RK, 'RAM + Time');
  218.     Lab[1] := CStrConstPtrAR(@RK, 'Backdrop Window');
  219.     Lab[2] := CStrConstPtrAR(@RK, 'Normal');
  220.     Lab[3] := CStrConstPtrAR(@RK, 'Display File');
  221.     Lab[4] := NIL;
  222.             
  223.     T[0].ti_Tag  := GTCY_Labels;
  224.     T[0].ti_Data := Long(@Lab);
  225.     T[1].ti_Tag  := GTCY_Active;
  226.     T[1].ti_Data := CD.cd_ScrT;
  227.     T[2].ti_Tag  := TAG_DONE;
  228.     With GadFlags Do Begin
  229.         ng_Width      := Sizes[S_G2_W];
  230.         ng_LeftEdge   := ((Sizes[TxtWin_L] * 2) div 3)+4;
  231.         ng_TopEdge    := ng_TopEdge+ng_Height+2;
  232.         ng_Height     := Sizes[S_GAD_H];
  233.         ng_GadgetText := CStrConstPtrAR(@RK, 'Screen');
  234.         ng_GadgetID   := G_DTS;
  235.         ng_GadgetID   := G_SCR;
  236.         ng_Flags      := PLACETEXT_LEFT;
  237.     End;
  238.     G[G_SCR] := CreateGadgetA(CYCLE_KIND, G[G_WIT], @Gadflags, @T);
  239.                 
  240.     T[0].ti_Tag  := GA_Disabled;
  241.     If CD.cd_ScrT <> ST_DT then
  242.         T[0].ti_Data := True_
  243.     else
  244.         T[0].ti_Data := False_;
  245.     T[1].ti_Tag  := GTST_MaxChars;
  246.     T[1].ti_Data := 255;
  247.     T[2].ti_Tag  := GTST_String;
  248.     T[2].ti_Data := LONG(CStrConstPtrAR(@RK, CD.cd_DT));
  249.     T[3].ti_Tag  := TAG_DONE;
  250.     With GadFlags Do Begin
  251.         ng_LeftEdge   := ((Sizes[TxtWin_L] * 2) div 3)+4;
  252.         ng_TopEdge    := ng_TopEdge+ng_Height+2;
  253.         ng_Height     := Sizes[S_GAD_H];
  254.         ng_GadgetText := CStrConstPtrAR(@RK, 'File');
  255.         ng_GadgetID   := G_DTS;
  256.         ng_Flags      := 0;
  257.         ng_Width      := ng_Width-(Sizes[TBS]*2);  
  258.     End;
  259.     G[G_DTS] := CreateGadgetA(STRING_KIND, G[G_SCR], @GadFlags, @T);
  260.  
  261.     T[1].ti_Tag := TAG_END;
  262.     With GadFlags Do Begin
  263.         ng_LeftEdge   := ng_LeftEdge + ng_Width;
  264.         ng_Width      := Sizes[TBS]*2;
  265.         ng_GadgetText := CStrConstPtrAR(@RK, '^');
  266.         ng_GadgetID   := G_REQ;
  267.     End;
  268.     G[G_REQ] := CreateGadgetA(BUTTON_KIND, G[G_DTS], @GadFlags, @T);
  269.     
  270.     T[1].ti_Tag  := GTCB_Checked;
  271.     T[1].ti_Data := ord(CD.cd_DTImmed); 
  272.     T[2].ti_Tag  := $80080044;  { GTCB_Scaled }
  273.     T[2].ti_Data := True_;
  274.     T[3].ti_Tag  := TAG_DONE;
  275.     With GadFlags Do Begin
  276.         ng_LeftEdge   := ((Sizes[TxtWin_L] * 2) div 3)+4;
  277.         ng_Width      := Sizes[S_CM_W];
  278.         ng_TopEdge    := ng_TopEdge + ng_Height + 1;
  279.         ng_GadgetText := CStrConstPtrAR(@RK, 'Play Immediately');
  280.         ng_GadgetID   := G_IMMED;
  281.         ng_Flags      := PLACETEXT_RIGHT;
  282.     End;
  283.     G[G_IMMED] := CreateGadgetA(CHECKBOX_KIND, G[G_REQ], @GadFlags, @T);
  284.     
  285.     T[1].ti_Data := ord(CD.cd_DTRepeat); 
  286.     With GadFlags Do Begin
  287.         ng_TopEdge    := ng_TopEdge + ng_Height + 1;
  288.         ng_GadgetText := CStrConstPtrAR(@RK, 'Repeat Playing');
  289.         ng_GadgetID   := G_REP;
  290.     End;
  291.     G[G_REP] := CreateGadgetA(CHECKBOX_KIND, G[G_IMMED], @GadFlags, @T);
  292.  
  293.     With GadFlags Do Begin
  294.         ng_LeftEdge   := Sizes[S_WB_L]+8;
  295.         ng_Width      := (Sizes[S_G2_W] div 3);
  296.         ng_TopEdge    := ng_TopEdge + Sizes[S_Gad_H] + 8;
  297.         ng_GadgetText := CStrConstPtrAR(@RK, 'Ok');
  298.         ng_GadgetID   := G_OK;
  299.         ng_Flags      := 0;
  300.     End;
  301.     G[G_OK] := CreateGadgetA(BUTTON_KIND, G[G_REP], @GadFlags, NIL);
  302.  
  303.     With GadFlags Do Begin
  304.         ng_LeftEdge   := ((Sizes[TxtWin_L] * 2) div 3) + Sizes[S_G2_W]+4-ng_Width; 
  305.         ng_GadgetText := CStrConstPtrAR(@RK, 'Cancel');
  306.         ng_GadgetID   := G_CAN;
  307.     End;
  308.     G[G_CAN] := CreateGadgetA(BUTTON_KIND, G[G_OK], @GadFlags, NIL);
  309.          
  310.     T[0].ti_Tag  := WA_Left;
  311.     T[0].ti_Data := Left;
  312.     T[1].ti_Tag  := WA_Top;
  313.     T[1].ti_Data := Top;
  314.     T[2].ti_Tag  := WA_InnerWidth;
  315.     T[2].ti_Data := ((Sizes[TxtWin_L] * 2) div 3) + Sizes[S_G2_W]+8;
  316.     T[3].ti_Tag  := WA_Height;
  317.     T[3].ti_Data := g[G_CAN]^.TopEdge + g[G_CAN]^.Height + Sizes[S_WB_B] + 4;
  318.     T[4].ti_Tag  := WA_Title;
  319.     T[4].ti_Data := LONG(CStrConstPtrAR(@RK, 'Screen and Window.')); 
  320.     T[5].ti_Tag  := WA_IDCMP;
  321.     T[5].ti_Data := STRINGIDCMP|BUTTONIDCMP|IDCMP_GADGETUP|IDCMP_REFRESHWINDOW|IDCMP_CLOSEWINDOW;
  322.     T[6].ti_Tag  := WA_DragBar;
  323.     T[6].ti_Data := True_;
  324.     T[7].ti_Tag  := WA_DepthGadget;
  325.     T[7].ti_Data := True_;
  326.     T[8].ti_Tag  := WA_AutoAdjust;
  327.     T[8].ti_Data := True_;
  328.     T[9].ti_Tag  := WA_Activate;
  329.     T[9].ti_Data := True_;
  330.     T[10].ti_Tag := WA_Gadgets;
  331.     T[10].ti_Data:= LONG(g[NI]);
  332.     T[11].ti_Tag := WA_SimpleRefresh;
  333.     T[11].ti_Data:= True_; 
  334.     T[12].ti_Tag := WA_CloseGadget;
  335.     T[12].ti_Data:= True_; 
  336.     T[13].ti_Tag := TAG_DONE;
  337.     
  338.     TheWin := OpenWindowTaglist(NIL,@T);
  339.     If TheWin <> NIL Then begin
  340.         GT_RefreshWindow(TheWin, NIL);
  341.         tmpdown := CalcDown(CD.cd_Across, G[G_DOWN], TheWin);
  342.  
  343.         ExitFlag := False;
  344.         While Not exitflag Do Begin
  345.             dummy := Wait(BitMask(TheWin^.UserPort^.MP_SIGBIT));
  346.             Repeat
  347.                 cont := True;
  348.                 message  := GT_GetIMsg(TheWin^.userPort);
  349.                 If message <> NIL then begin
  350.                     MsgClass := message^.Class;
  351.                     Msgcode := message^.Code;
  352.                     if MsgClass = IDCMP_GADGETUP then begin
  353.                         GadID := pGadget(message^.IAddress)^.GadgetID;
  354.                         StrInfo  := pGadget(message^.IAddress)^.SpecialInfo;
  355.                     end;
  356.                     GT_ReplyIMsg(message);
  357.                     Case MsgClass Of
  358.           
  359.                         IDCMP_REFRESHWINDOW : Begin
  360.                             GT_BeginRefresh(TheWin);
  361.                             GT_EndRefresh(TheWin, True);
  362.                         end;
  363.               IDCMP_CLOSEWINDOW : ExitFlag := True;
  364.                         IDCMP_GADGETUP : Begin
  365.                             Case GadID Of
  366.                                 G_ACROSS : begin
  367.                                     AcrossGadFunc;
  368.                                     tmpdown := CalcDown(tmpAcross, G[G_DOWN], TheWin);
  369.                                 End;
  370.                                 G_SCR : begin
  371.                                     tmpscrt := MsgCode;
  372.                                     if tmpscrt = ST_DT then begin
  373.                                         DisableGadget(g[G_DTS], TheWin, False_);
  374.                                         DisableGadget(g[G_REQ], TheWin, False_);
  375.                                         DisableGadget(g[G_IMMED], TheWin, False_);
  376.                                         DisableGadget(g[G_REP], TheWin, False_);
  377.                                     end else begin
  378.                                         DisableGadget(g[G_DTS], TheWin, True_);
  379.                                         DisableGadget(g[G_REQ], TheWin, True_);
  380.                                         DisableGadget(g[G_IMMED], TheWin, True_);
  381.                                         DisableGadget(g[G_REP], TheWin, True_);
  382.                                     End;
  383.                                 End;
  384.                                 G_REQ  : begin
  385.                                     l := pointer(rtLockWindow(TheWin));
  386.                    
  387.                        StrInfo := g[G_DTS]^.SpecialInfo;
  388.                                     CmdFile := PtrToPas(StrInfo^.Buffer)+#0;
  389.                                     FSplit(PtrToPas(StrInfo^.Buffer),dpart,fpart,junkis);
  390.                                     dpart := dpart+#0;
  391.                                     fpart := fpart+junkis+#0;
  392.                 
  393.                                     T[0].ti_Tag  := ASLFR_TitleText;
  394.                                     T[0].ti_Data := LONG(CStrConstPtrAR(@RK, 'Pick a file'));
  395.                                     T[1].ti_Tag  := ASLFR_Window;
  396.                                     T[1].ti_Data := long(TheWin);
  397.                                     T[2].ti_Tag  := ASLFR_Flags1;
  398.                                     T[2].ti_Data := FRF_DOPATTERNS;
  399.                                     T[3].ti_Tag  := ASLFR_Flags2;
  400.                                     T[3].ti_Data := FRF_REJECTICONS;
  401.                                     T[4].ti_Tag  := ASLFR_InitialPattern;
  402.                                     T[4].ti_Data := LONG(CStrConstPtrAR(@RK, '#?'));
  403.                                     T[5].ti_Tag  := ASLFR_InitialDrawer;
  404.                                     T[5].ti_Data := long(@dpart[1]);
  405.                                     T[6].ti_Tag  := ASLFR_InitialFile;
  406.                                     T[6].ti_Data := long(@fpart[1]);
  407.                                     T[7].ti_Tag  := TAG_DONE;
  408.     
  409.                                     cr := AllocASLRequest(ASL_FileRequest, @T[0]);
  410.                 
  411.                                     if AslRequest(cr, NIL) then begin
  412.                    
  413.                            l3 := Lock(STRPTR(cr^.fr_Drawer), ACCESS_READ);
  414.                            if l3 <> NULL then begin
  415.                                strp := AllocMem(255, MEMF_CLEAR);
  416.                                if strp <> NIL then begin
  417.                                    if NameFromLock(l3,strp,255) then begin
  418.                                        CmdDir := PtrToPas(strp)+#0;
  419.                                                     CmdFile := PtrToPas(STRPTR(cr^.fr_file))+#0;
  420.                                                     if AddPart(@Cmddir[1], STRPTR(cr^.fr_file), 255) then
  421.                                                         T[0].ti_Data := LONG(CStrConstPtrAR(@RK, PtrToPas(@Cmddir[1])))
  422.                                                     else
  423.                                                         T[0].ti_Data := LONG(CStrConstPtrAR(@RK, PtrToPas(STRPTR(cr^.fr_file))));
  424.     
  425.                                                     T[0].ti_Tag  := GTST_String;
  426.                                                     T[1].ti_Tag  := TAG_END;
  427.                                                     GT_SetGadgetAttrsA(g[G_DTS], TheWin, NIL, @T);
  428.                                                 end;
  429.                                                 FreeMem_(strp,255);
  430.                                             end;
  431.                                         end;
  432.                                     end;        
  433.                                     FreeAslRequest(cr);
  434.                                     rtUnLockWindow(TheWin, l);
  435.                                 end;
  436.     
  437.                                 G_OK : begin    
  438.                                                             
  439.                                     StrInfo := g[G_ACROSS]^.SpecialInfo;
  440.                                     CD.cd_Across := StrInfo^.LongInt_;
  441.                                     
  442.                                     CD.cd_Down := CalcDown(CD.cd_Across, NIL, NIL);
  443.                                     
  444.                                     StrInfo := g[G_WAIT]^.SpecialInfo;
  445.                                     CD.cd_Wait := StrInfo^.LongInt_;
  446.                                     
  447.                                     CD.cd_ScrT := tmpScrT;
  448.                                     
  449.                                     StrInfo := g[G_DTS]^.SpecialInfo;
  450.                                     CD.cd_DT := PtrToPas(strinfo^.Buffer);
  451.                                     
  452.                                     CD.cd_DTImmed := False;
  453.                                     if G[G_IMMED]^.Flags and GFLG_SELECTED <> 0 then 
  454.                                         CD.cd_DTImmed := True;
  455.                                     
  456.                                     CD.cd_DTRepeat := False;
  457.                                     if G[G_REP]^.Flags and GFLG_SELECTED <> 0 then 
  458.                                         CD.cd_DTRepeat := True;
  459.                                         
  460.                                     CD.cd_Wit := False;
  461.                                     if G[G_WIT]^.Flags and GFLG_SELECTED <> 0 then 
  462.                                         CD.cd_Wit := True;
  463.                                         
  464.                                     CheckFile(strinfo^.Buffer);
  465.     
  466.                                     ExitFlag := True;
  467.                                     ret := True;
  468.                                 end;
  469.                 
  470.                                 G_CAN : ExitFlag := True;
  471.                             End; (*case*)
  472.                         end;
  473.                     End; (*case*)
  474.                 End else cont := False;
  475.                 Until cont = False;
  476.             End; (*while*)
  477.             CloseWindow(TheWin);
  478.             FreeGadgets(g[NI]);
  479.         end;
  480.     end;
  481.     FreeRemember(@RK, true);
  482. end;